#ifndef ACCOUNT_SYSTEM_USERINTERFACE_H
#define ACCOUNT_SYSTEM_USERINTERFACE_H

#include <string>
#include <memory>
#include "BankingSystem.h"
using namespace std;
class UserInterface
{
private:
    shared_ptr<BankingSystem> bankingSystem;  // 银行系统的共享指针

    // 不同界面的辅助方法
    void displayMainMenu();           // 显示主菜单
    void handleRegisterCustomer();    // 处理注册新客户
    void handleAccessCustomer();      // 处理访问客户账户
    void handleViewAllAccounts();     // 处理查看所有账户
    void handleTransactionReports();  // 处理交易报告

    // 客户账户界面
    void displayCustomerMenu(const shared_ptr<Customer> &customer);              // 显示客户菜单
    void handleViewCustomerTransactions(const shared_ptr<Customer> &customer);   // 处理查看客户交易
    void handleGenerateCustomerReport(const shared_ptr<Customer> &customer);     // 处理生成客户报告

    // 账户操作界面
    void displayAccountMenu(const shared_ptr<Account> &account, const shared_ptr<Customer> &customer);  // 显示账户菜单
    void handleDeposit(const shared_ptr<Account> &account);       // 处理存款操作
    void handleWithdraw(const shared_ptr<Account> &account);      // 处理取款操作
    void handleTransfer(const shared_ptr<Account> &account);      // 处理转账操作
    void handleViewAccountTransactions(const shared_ptr<Account> &account);   // 处理查看账户交易
    void handleGenerateAccountReport(const shared_ptr<Account> &account);     // 处理生成账户报告

    // 实用方法
    void waitForEnter() const;           // 等待用户按回车键继续
    string getCurrentDate() const;  // 获取当前日期

public:
    UserInterface();  // 构造函数
    void run();       // 运行用户界面
};

#endif // ACCOUNT_SYSTEM_USERINTERFACE_H